package com.shujia.spark.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo1WordCount {


  def main(args: Array[String]): Unit = {

    /**
      * 1、创建spark环境
      */
      //spark配置文件对象
    val conf = new SparkConf()
    //任务名
    conf.setAppName("wc")
    //指定运行方法  local:本地运行
    conf.setMaster("local")

    //创建spark上下文对象 ， spark入口
    val sc: SparkContext = new SparkContext(conf)

    /**
      * RDD: 弹性的分布式数据集
      * 可以理解为一个集合
      *不存储数据
      */

    //1、读取数据
    val linesRDD: RDD[String] = sc.textFile("data/words.txt")

    //2、将单词切分出来
    val wordsRDD: RDD[String] = linesRDD.flatMap(line => line.split(","))

    //3、按照单词进行分组
    val groupRDD: RDD[(String, Iterable[String])] = wordsRDD.groupBy(word => word)

    //4、统计单词数量
    val countRDD: RDD[(String, Int)] = groupRDD.map{
      case (word: String, ws: Iterable[String]) =>
      //计算出单词数量
      val count: Int = ws.size
        (word,count)
    }

    //5、整理数据
    val resultRDD: RDD[String] = countRDD.map{
      case (word: String, count: Int) =>
        word + "\t" + count
    }

    //resultRDD.foreach(println)

    //6、保存数据
    resultRDD.saveAsTextFile("data/wc")

  }


}
